Pandas 实战系列:几行代码搞定组内占比 |
您所在的位置:网站首页 › javastream流分组 占比 › Pandas 实战系列:几行代码搞定组内占比 |
前言 分组占比问题一直是工作及面试的高频问题,有经验的小伙伴想必不会陌生;在实际应用场景下多数是使用数据库窗口函数解决,本文将介绍如何使用pandas处理这类问题。需要说明的是,本文主要是思路的分享,所以构造了简单的数据,实际工作中可能面对比较复杂的数据,比如多字段重复,那么要求我们根据实际业务需求先进行数据清洗,但无论多么复杂的场景,思路是一样的。 正文 1、需求及问题 现有一张区域销售数据表,要求按月维度计算各个区域销售额在整个月销售额中的占比,最后按月输出结果到不同的sheet中,数据表样式如下: 2、解决思路 根据要求,按月维度聚合销售额,然后求各区域销售额在总销售额中的占比;然后把结果按月写入excel不同的sheet中,思路很简单,下面直接上代码。 3、实战代码 import pandas as pd import numpy as np df=pd.read_excel('C:/Users/young/Desktop/分组占比.xlsx',sheet_name=0)#读取数据 df['月份']=pd.to_datetime(df['日期']).dt.month #把日期转为'月' df.set_index('月份',inplace=True) #把'月份'设为索引 #计算占比同时格式化输出(保留两位小数并以%显示) df['分组占比'] = (100*df['销售额']/df['销售额'].sum(level = '月份')).round(2).map('{}%'.format)代码写到这,该需求已经基本完成了,让我们看看实际的效果吧: 下面是最后一步,按月输出到不同的sheet: df.reset_index(inplace=True) #因为我们需要按月份写入,所以需要重置索引 month_num=df['月份'].unique() writer=pd.ExcelWriter(r'C:/Users/young/Desktop/分组占比.xlsx',datetime_format='YYYY-MM-DD') for i in month_num: temp=df[df['月份'].isin([i])] temp.to_excel(writer,sheet_name=str(i)+'月',index=False) writer.save() writer.close()来看看效果: 以上,如果觉得有点用,请记得点赞关注,谢谢! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |